Bonds are derived from chem2.Bond
and indicate binding interactions between sites. By default, a bond may only have two sites and a site may only have one bond.
The Bond
object has a sites
attribute which holds the pair of sites as a list. The following methods are available to Bond
objects.
Instance Attribute | Setter | Getter | Unsetter |
---|---|---|---|
id |
set_id(id) |
get_id() |
|
sites |
add_sites(*sites) |
get_sites(**kwargs) |
remove_sites(*sites) |
Bonds have internal class attributes that dictate bond behavior. These include:
Class Attribute | Default Value | Description |
---|---|---|
allowed_site_types |
None | Tuple of allowed site classes |
n_max_sites |
2 | Maximum number of sites per bond |
For the purpose of managing bonds, Site
objects have the bond
instance attribute and the allowed_to_bind
class attribute.
Instance Attribute | Setter | Getter | Unsetter |
---|---|---|---|
bond |
set_bond(bond) |
get_bond() |
unset_bond() |
Class Attribute | Default Value | Description |
---|---|---|
allowed_to_bind |
True | Boolean controlling whether site can have a bond |
Function | Site method |
Bond method |
---|---|---|
Attach sites to a bond | set_bond(bond) |
add_sites(*sites) |
Detach sites from a bond | unset_bond() |
remove_sites(*sites) |
Get/Filter the attached sites | get_sites(**kwargs) |
|
Get the attached bond | get_molecule() |
In [1]:
from wc_rules.chem2 import Molecule,Site,Bond
In [2]:
# creating sites to use for bond
class LigandBinding(Site):pass
class ReceptorBinding(Site):pass
s1,s2 = LigandBinding(id='s1'), ReceptorBinding(id='s2')
In [3]:
# Attaching sites to a bond using add_sites()
bnd = Bond(id='bnd').add_sites(s1,s2)
# Getting sites attached to a bond
bnd.get_sites()
Out[3]:
In [4]:
# Filtering attached sites by id
bnd.get_sites(id='s1')
Out[4]:
In [5]:
# Removing attached sites using remove_sites()
bnd.remove_sites(s1,s2)
bnd.get_sites()
Out[5]:
In [6]:
# Attaching sites to a bond using set_bond()
bnd = Bond(id='bnd')
s1.set_bond(bnd)
s2.set_bond(bnd)
bnd.get_sites()
Out[6]:
In [7]:
# Getting bond attached to sites
[s1.get_bond().get_id(), s2.get_bond().get_id()]
Out[7]:
In [8]:
# Removing bond from sites using remove_bond()
s1.unset_bond()
s2.unset_bond()
bnd.get_sites()
Out[8]:
In [9]:
# Subclassing bonds to increase the number of allowed sites
class TetramerBond(Bond):
n_max_sites = 4
bnd1 = TetramerBond().add_sites( Site(), Site(), Site(), Site() )
bnd2 = Bond().add_sites( Site(), Site(), Site(), Site() )
for x in [bnd1,bnd2]:
try:
x.verify_maximum_number_of_sites()
print('Allowed.')
except:
print('Not allowed.')
Overlaps are groups of sites that can only have one bond at a time. They are used to reflect groups of sites that spatially overlap with each other.
The Overlap
object has a sites
attribute which holds a list of sites.
Attribute | Setter | Getter | Unsetter |
---|---|---|---|
id |
set_id(id) |
get_id() |
|
sites |
add_sites(*sites) |
get_sites(**kwargs) |
remove_sites(*sites) |
Site
objects have the instance attribute overlaps
, which holds a list of overlaps.
Attribute | Setter | Getter | Unsetter |
---|---|---|---|
overlaps |
add_overlaps(*overlaps) |
get_overlaps(**kwargs) |
remove_overlaps(*overlap) |
In [10]:
# Creating sites to use in overlaps
s1,s2,s3 = Site(id='s1'), Site(id='s2'), Site(id='s3')
In [11]:
# Adding overlaps using add_sites()
from wc_rules.chem2 import Overlap
olp1 = Overlap(id='olp1').add_sites(s1,s2)
# Getting overlapping sites
olp1.get_sites()
Out[11]:
In [12]:
# Filtering overlapping sites
olp1.get_sites(id='s1')
Out[12]:
In [13]:
# Remove overlaps using remove_sites()
olp1.remove_sites(s1,s2)
olp1.get_sites()
Out[13]:
In [14]:
# Add overlaps using add_overlaps()
s1.add_overlaps(olp1)
s2.add_overlaps(olp1)
olp1.get_sites()
Out[14]:
In [15]:
# Get overlaps from site
s1.get_overlaps()
Out[15]:
In [16]:
# Remove overlaps using remove_overlaps()
s1.remove_overlaps(olp1)
s2.remove_overlaps(olp1)
olp1.get_sites()
Out[16]:
In [17]:
# An overlap may have many sites
olp1 = Overlap(id='s1').add_sites(s1,s2,s3)
olp1.get_sites()
Out[17]:
In [18]:
# A site may have many overlaps
olp1.remove_sites(s1,s2,s3)
olp1 = Overlap(id='s1').add_sites(s1,s2)
olp2 = Overlap(id='s1').add_sites(s1,s3)
s1.get_overlaps()
Out[18]: